RocketMQ Streams 核心概念
领域模型
StreamBuilder
- 一个 StreamBuilder 实例拥有 1 到 N 个管道,其中管道代表数据处理路径。
- 一个管道可以包含 1 到 N 个处理节点,称为 GroupNodes。
- 一个 StreamBuilder 实例还拥有一个 TopologyBuilder,它可以构建数据处理器。
- 每个 JobId 对应一个 StreamBuilder 实例。
RocketMQStream
- 一个 RocketMQStream 实例拥有一个 TopologyBuilder 用于构建拓扑。
- 一个 RocketMQStream 实例可以实例化 1 到 N 个工作线程。
- 每个线程由一个 WorkerThread 实例表示,包含一个引擎。
- 一个引擎包含执行数据处理的所有逻辑,包括一个消费者实例、一个生产者实例和一个 StateStore 实例。
流处理实例
一个流处理实例代表一个运行 RocketMQ Streams 的进程;
- 一个流处理实例包含一个 StreamBuilder、一个 RocketMQStream、一个拓扑和一个或多个管道。
StreamBuilder
StreamBuilder(jobId)
构建实例;<OUT> RStream<OUT> source(topicName, deserializer)
定义源主题和反序列化方法;
RStream
<K> GroupedStream<K, T> keyBy(selectAction)
按特定字段对数据进行分组;<O> RStream<O> map(mapperAction)
一对一地转换数据;RStream<T> filter(predictor)
过滤数据<VR> RStream<T> flatMap(mapper)
一对多地转换数据;<T2> JoinedStream<T, T2> join(rightStream)
执行双流连接;sink(topicName, serializer)
将结果输出到特定主题;
GroupedStream
对具有相同键的数据进行操作
<OUT> GroupedStream<K, Integer> count(selectAction)
统计包含特定字段的数据条目数量。GroupedStream<K, V> min(selectAction)
计算特定字段的最小值。GroupedStream<K, V> max(selectAction)
计算特定字段的最大值。GroupedStream<K, ? extends Number> sum(selectAction)
计算特定字段的总和。GroupedStream<K, V> filter(predictor)
过滤特定字段。<OUT> GroupedStream<K, OUT> map(valueMapperAction)
执行一对一的数据转换。<OUT> GroupedStream<K, OUT> aggregate(accumulator)
对数据执行聚合操作,并支持二阶聚合,例如在窗口触发之前添加数据,并在窗口触发时计算结果。WindowStream<K, V> window(windowInfo)
为流定义一个窗口。GroupedStream<K, V> addGraphNode(name, supplier)
在低级接口中将自定义操作符添加到流处理拓扑。RStream<V> toRStream()
转换为 RStream,仅在接口方面进行转换,不影响数据。sink(topicName, serializer)
以自定义序列化格式将结果写入主题。
WindowStream
对已划分为窗口的数据进行操作
WindowStream<K, Integer> count()
统计窗口中数据条目的数量。WindowStream<K, V> filter(predictor)
过滤窗口中的数据。<OUT> WindowStream<K, OUT> map(mapperAction)
对窗口中的数据执行一对一的数据转换。<OUT> WindowStream<K, OUT> aggregate(aggregateAction)
对窗口中的数据执行多对一的数据转换。<OUT> WindowStream<K, OUT> aggregate(accumulator)
对窗口中的数据执行聚合操作,并支持二阶聚合,例如在窗口触发之前添加数据,并在窗口触发时计算结果。void sink(topicName, serializer)
以自定义序列化格式将结果写入主题。